package com.pe.pgn.clubpgn.webapp.controller.empresaafiliadora;

import java.math.BigDecimal;
import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

import com.pe.pgn.clubpgn.common.CLPConstantes;
import com.pe.pgn.clubpgn.domain.beans.BNEmpresaAfiliadora;
import com.pe.pgn.clubpgn.domain.beans.BNProgramaDetalle;
import com.pe.pgn.clubpgn.service.EmpresaAfiliadoraService;
import com.pe.pgn.clubpgn.webapp.controller.BaseFormController;

@Controller
@RequestMapping("/empresaafiliadora/**")
public class EmpresaAfiliadoraController extends BaseFormController {

	private static final String ES_EDITABLE = "esEditable";
	private static final String EMPRESA_AFILIADORA_FORM = "/empresaafiliadora/empresaafiliadoraform";
	private static final String EMPRESA_AFILIADORA = "empresaafiliadora";
	
	@Autowired
	private EmpresaAfiliadoraService empresaAfiliadoraService;

	@RequestMapping(value = "/empresaafiliadoralist.html")
	public void listarEmpresasAfiliadoras(Model model){
		
		List<BNEmpresaAfiliadora> lista = empresaAfiliadoraService.listarTodasLasEmpresasAfiliadoras();
		model.addAttribute("empresasAfiliadoras", lista);
	}
	
	@RequestMapping(value = "/empresaafiliadoraform.html", method = RequestMethod.GET)
	public @ModelAttribute(EMPRESA_AFILIADORA) BNEmpresaAfiliadora verEmpresaAfiliadora(
				@RequestParam(value = "id", required = false) Long id, Model model) {

		List<BNProgramaDetalle> programas = empresaAfiliadoraService.obtenerProgramasActivosParaEmpresasAfiliadoras();
		model.addAttribute("programas", programas);
		
		BNEmpresaAfiliadora empresaAfiliadora = new BNEmpresaAfiliadora();
		if (id != null) {		
			
			boolean esEmpresaConDependencias = 
					empresaAfiliadoraService.esEmpresaAfiliadoraConDependencias(new BigDecimal(id.toString()));
			if(esEmpresaConDependencias){
				model.addAttribute(ES_EDITABLE, CLPConstantes.ZERO);
			} else {
				model.addAttribute(ES_EDITABLE, CLPConstantes.UNO);
			}
			
			empresaAfiliadora = empresaAfiliadoraService.obtenerEmpresaAfiliadoraPorId(new BigDecimal(id.toString()));
			return empresaAfiliadora;
		}
		model.addAttribute(ES_EDITABLE, CLPConstantes.UNO);
		empresaAfiliadora.setStEmpresaAfiliadora(Boolean.TRUE);
		return empresaAfiliadora;
	}
	
	@RequestMapping(value = "/empresaafiliadoraform.html", method = RequestMethod.POST)
	public String guardarEmpresaAfiliadora(
			@ModelAttribute(EMPRESA_AFILIADORA) BNEmpresaAfiliadora empresaAfiliadora, 
			BindingResult result, HttpServletRequest request, Model model){
		
		try {
			
			if(result.hasErrors()){
				return EMPRESA_AFILIADORA_FORM;
			}
			
			empresaAfiliadoraService.guardarEmpresaAfiliadora(empresaAfiliadora);
			saveMessage(request, getText("empresaafiliadoraform.added", 
					empresaAfiliadora.getDeEmpresaAfiliadora(), request.getLocale()));
			return "redirect:empresaafiliadoralist.html";
			
		} catch (Exception e) {
			saveError(request, getText("errors.general", request.getLocale()));
			model.addAttribute(EMPRESA_AFILIADORA, empresaAfiliadora);
			return EMPRESA_AFILIADORA_FORM;
		}
	}
	
	@RequestMapping(value = "/eliminarempresaafiliadora.html", method = RequestMethod.GET)
	public String eliminarEmpresaAfiliadora(@RequestParam(value = "id", required = false) Long id,
			HttpServletRequest request, Model model) {
		
		try {			
				
			empresaAfiliadoraService.eliminarEmpresaAfiliadora(new BigDecimal(id.toString()));
			saveMessage(request, getText("empresaafiliadoraform.deleted", request.getLocale()));
			return "redirect:empresaafiliadoralist.html";
			
		} catch (Exception e) {
			saveError(request, getText("errors.general", request.getLocale()));
			return "redirect:almacenform.html?from=list&id="+id;
			
		}		
	}

}
